package com.sl.biz.modular.process.dao.service.impl;

import cn.hutool.core.bean.BeanUtil;
import cn.hutool.core.util.ObjectUtil;
import cn.hutool.core.util.StrUtil;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;
import com.baomidou.mybatisplus.extension.service.impl.ServiceImpl;
import com.sl.biz.modular.process.dao.domain.dto.ProcessConfigDTO;
import com.sl.biz.modular.process.dao.domain.entity.ProcessConfigDO;
import com.sl.biz.modular.process.dao.mapper.ProcessConfigMapper;
import com.sl.biz.modular.process.dao.service.ProcessConfigDaoService;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;

import java.util.List;

@Service
@RequiredArgsConstructor
public class ProcessConfigDaoServiceImpl extends ServiceImpl<ProcessConfigMapper, ProcessConfigDO> implements ProcessConfigDaoService {

//    @Override
//    public ProcessConfigDTO queryByProcessId(Long processId) {
//        LambdaQueryWrapper<ProcessConfigDO> wrapper = Wrappers.lambdaQuery();
//        wrapper.eq(ProcessConfigDO::getProcessId, processId);
//        ProcessConfigDO list = baseMapper.selectOne(wrapper);
//        return BeanUtil.copyProperties(list, ProcessConfigDTO.class);
//    }
//
//    @Override
//    public Boolean removeByProcessId(Long processId) {
//        LambdaUpdateChainWrapper<ProcessConfigDO> chainWrapper = new LambdaUpdateChainWrapper<>(baseMapper);
//        chainWrapper.eq(ProcessConfigDO::getProcessId, processId);
//        chainWrapper.set(ProcessConfigDO::getDeleted, DataBaseConstant.DELETE_INVALID);
//        boolean ret = chainWrapper.update();
//        return ret;
//    }

    @Override
    public List<ProcessConfigDTO> queryByGroupId(String groupId, String keywords) {
       return this.queryByGroupIdAndProductId(groupId, null, keywords);
    }

    @Override
    public List<ProcessConfigDTO> queryByGroupIdAndProductId(String groupId, String productId, String keywords) {
        LambdaQueryWrapper<ProcessConfigDO> wrapper = Wrappers.lambdaQuery();
        wrapper.eq(StrUtil.isNotBlank(groupId), ProcessConfigDO::getGroupId, groupId);
        wrapper.eq(ObjectUtil.isNotNull(productId), ProcessConfigDO::getProductId, productId);
        if (StrUtil.isNotBlank(keywords)) {
            wrapper.and(d -> d.like(ProcessConfigDO::getProcessName, keywords)
                    .or().like(ProcessConfigDO::getProcessCode, keywords)
                    .or().like(ProcessConfigDO::getDescription, keywords));
        }

        List<ProcessConfigDO> list = baseMapper.selectList(wrapper);
        return BeanUtil.copyToList(list, ProcessConfigDTO.class);
    }

    @Override
    public List<ProcessConfigDTO> getByIds(List<String> processIdList) {
        LambdaQueryWrapper<ProcessConfigDO> wrapper = Wrappers.lambdaQuery();
        wrapper.in(ProcessConfigDO::getId, processIdList);
        List<ProcessConfigDO> list = baseMapper.selectList(wrapper);
        return BeanUtil.copyToList(list, ProcessConfigDTO.class);
    }
}
